#include<iostream>
#include<algorithm>
using namespace std;
template<class T>
void PrintInterval(T first,T last)
{
	for(;first != last; ++first)
	cout<<* first<<" ";
	cout<<endl;
}
class A
{
	public:
		int v;
		A(int n):v(n){ }
};
bool operator <(const A &a1,const A &a2)
{
	return a1.v<a2.v;
}
bool GreaterA (const A &a1,const A &a2)
{
	return a1.v>a2.v;
}
struct LessA
{
	bool operator()(const A & a1,const A & a2)
	{
		return (a1.v % 10)<(a2.v % 10);
	}
};
ostream & operator<<(ostream & o,const A & a)
{
	o<<a.v;
	return o;
}
int main()
{
	int a1[4] = {5,2,4,1};
	A a2[5] = {13,12,9,8,16};
	sort(a1,a1+4);
	cout<<"1)";PrintInterval(a1,a1+4);
	sort(a2,a2+5);
	cout<<"2)";PrintInterval(a2,a2+5);
	sort(a2,a2+5,GreaterA);
	cout<<"3)";PrintInterval(a2,a2+5);
	sort(a2,a2+5,LessA());
	cout<<"4)";PrintInterval(a2,a2+5);
	return 0;
	
}